/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controle;

import entidades.Equipamento;
import entidades.Rack;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.model.DualListModel;
import persistencia.RepositorioJPAEquipamentos;
import persistencia.RepositorioJPARack;

/**
 *
 * @author Gleydson
 */
@ManagedBean(name = "RacksBean")
@ViewScoped
public class RacksBean {

    private DualListModel<Equipamento> dualListEquipamentos;
    private Rack bean;
    private RepositorioJPARack repositorio;
    private RepositorioJPAEquipamentos repositorioEquipamentos;
    private List<Rack> lista;
    private List<Equipamento> source;
    private List<Equipamento> target;
    private boolean insert;

    public RacksBean() {
        bean = new Rack();
        repositorio = new RepositorioJPARack();
        repositorioEquipamentos = new RepositorioJPAEquipamentos();
        lista = repositorio.getAll();
        source = new ArrayList<Equipamento>();
        target = new ArrayList<Equipamento>();
        this.dualListEquipamentos = new DualListModel<Equipamento>(source, target);
        insert = true;
    }

    public void botaoNovoAction() {
        source = repositorioEquipamentos.getAll();
        target.clear();

        this.dualListEquipamentos.setSource(source);
        this.dualListEquipamentos.setTarget(target);
        insert = true;
        bean = new Rack();
    }

    public void botaoAlterarAction() {
        Equipamento temp;
        source = repositorioEquipamentos.getAll();
        target.clear();
        
        for (Iterator<Equipamento> it = bean.getEquipamentoList().iterator(); it.hasNext();) {
            temp = it.next();
            target.add(temp);
            source.remove(temp);
        }
        
        this.dualListEquipamentos.setSource(source);
        this.dualListEquipamentos.setTarget(target);
        insert = false;
    }

    public void botaoApagarAction() {
        getRepositorio().delete(getBean());
        lista = repositorio.getAll();
    }

    public void botaoSalvarAction() {
        Equipamento temp;        
        
        target = dualListEquipamentos.getTarget();
        
        if (insert) {
            getRepositorio().insert(getBean());
        } else {
            getRepositorio().update(getBean());
        }
        
        for (Iterator<Equipamento> it = target.iterator(); it.hasNext();) {
            temp = it.next();
            temp.setRacknumero(bean);
            repositorioEquipamentos.update(temp);
        } 
        
        repositorio = new RepositorioJPARack();
        lista = repositorio.getAll();
    }

    public Rack getBean() {
        return bean;
    }

    /**
     * @param tipo the tipo to set
     */
    public void setBean(Rack bean) {
        this.bean = bean;
    }

    /**
     * @return the repositorioTipo
     */
    public RepositorioJPARack getRepositorio() {
        return repositorio;
    }

    /**
     * @param repositorioTipo the repositorioTipo to set
     */
    public void setRepositorio(RepositorioJPARack repositorio) {
        this.repositorio = repositorio;
    }

    /**
     * @return the tipos
     */
    public List<Rack> getLista() {
        return lista;
    }

    /**
     * @param tipos the tipos to set
     */
    public void setLista(List<Rack> lista) {
        this.lista = lista;
    }

    /**
     * @return the dualListEquipamentos
     */
    public DualListModel<Equipamento> getDualListEquipamentos() {
        return dualListEquipamentos;
    }

    /**
     * @param dualListEquipamentos the dualListEquipamentos to set
     */
    public void setDualListEquipamentos(DualListModel<Equipamento> dualListEquipamentos) {
        this.dualListEquipamentos = dualListEquipamentos;
    }
}
